
#列表 & 迭代器
def list1():
    print("------------------列表----------------")
    list2=[1,2,3,4,5,6,7,8,9,10]
    list3=['a','b','c','d','e','f','g','h','i','j']
    #将列表当做堆栈使用
    list2.append(5)  # 追加 入栈
    list2.pop()      # 移除 出栈
    list2.remove(1)  # 移除数据为1的
    print("list2 = ",list2)
    del list2[1]    # 移除指定下标
    print("list2 = ", list2)
    # 检查元素是否在列表
    print(f'2 is in list2 = {2 in list2} index = {list2.index(2)}')
    # 指定位置插入元素
    list2.insert(1,55)
    list2.insert(1,-1)
    list2.sort(key=None,reverse=True) #倒序

    # 直接遍历
    for val in list2:
        print(f'遍历 数值 = {val}')

    # 反向遍历
    for val in reversed(list2):
        print(f'反向遍历 数值 = {val}')

    # 带下标遍历
    for idx, val in enumerate(list2):
        print(f'下标 = {idx} ,数值 = {val}')

    # 使用迭代器遍历1
    for val in iter(list2):
        print(f'迭代器遍历1 数值 = {val}')

    # 使用迭代器遍历2 利用异常
    it=iter(list2)
    while True:
        try:
            print(f'迭代器遍历2 数值 = {next(it)}')
        except StopIteration:
            print("已经遍历结束")
            break # 遍历结束后必须跳出循环，否则无线循环

    # 使用迭代器遍历3 利用next 给出设定遍历结束后的默认值，跳出循环
    it = iter(list2)
    while True:
        itval=next(it,-1)
        print(f'迭代器遍历3 数值 = {itval}')
        if itval == -1:
            break  # 遍历结束后必须跳出循环，否则无线循环

    # 同时遍历两个列表 使用zip函数
    for i,j in zip(list2,list3):
        print('list2中元素 = {} ,list3中的元素{}'.format(i,j))

    # 给序列排序,sorted 返回一个排序后的序列
    print(f'排序后的list2 = {sorted(list2)}')
        

#集合类型
def set1():
    print("------------------集合类型----------------")
    # 方式1 创建集合类型
    se1={"ss","aa","bb"}
    # 方式2 声明集合
    se2=set('abcd')
    se3=se2.union(se1) # 取并集
    print(f'se1 = {se1} se2 = {se2} se3={se3}')

    se1.add("dd")
    print(f'se1 = {se1}')
    se1.update('cc')    # cc被视为一个集合，拆分为2个C，最终只有一个c
    se1.remove("ss")    # 或用discard() ,删除不存在的元素不报错
    print(f'se1 = {se1}')

# 元组
def tup1():
    print("------------------元组----------------")
    # 元组不可添加,修改，删除元素，可选选择截取重新得到想要的元组
    tuple1=[1,2,3,4,"a"]
    print(f'tuple1 = {tuple1}')

# 字典
def dict():
    print("------------------字典----------------")
    # 可以 使用大括号 {} 来创建空字典
    dict1={"a":1,"b":2,"c":3,11:22,22:33}
    # 添加元素
    dict1.setdefault("d",4)
    # 更新
    dict1.update({"d":5})
    # 移除
    dict1.pop("a")
    # 根据key 取值
    bval = dict1.get("b")
    # keys方法 取得所有keys，然后转换为列表
    print(f'dict1 = {dict1} b={bval} \n keys ={list(dict1.keys())} values = {list(dict1.values())}')

    # 遍历字典
    for key,val in dict1.items():
        print(f'key = {key} value = {val}')

if __name__ == '__main__':
    list1()
    set1()
    tup1()
    dict()
